/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Calculos;

import java.util.ArrayList;

/**
 *
 * @author Beto
 */
public class CalculaCargaMomento {

    private double incremento = 0.005;
    private static final double coeficienteE = 205*Math.pow(10, 9);
    private ArrayList<double[]>  cargaMomento = new ArrayList<double[]>();
    private ArrayList<double []> deformada=new ArrayList<double[]>();
    private double RA,RB;    






     public void CalculaCargaMomento(double forca,double tamanhoViga,double posicao){


        calculaReacoesApoios(forca, tamanhoViga, posicao);
        MomentoFletorCargaMomento(forca, tamanhoViga,posicao);
        EsforcoCortanteCargaMomento(forca, tamanhoViga,posicao);

    }

     private void calculaReacoesApoios(double forca,double tamanhoViga,double posicao){
    ///////////////////Reação para RA///////////////////////

    RA=-1*forca/tamanhoViga;


    ///////////////////////Reação para RB/////////////////

    RB=forca/tamanhoViga;
}


    private void MomentoFletorCargaMomento(double forca, double tamanhoViga, double posicao) {

        int tamanhoVetor = (int) (tamanhoViga / incremento);
        double x[] = new double[tamanhoVetor];
        double y[] = new double[tamanhoVetor];
        for (int i = 1; i < tamanhoVetor; i++) {
            x[i] = x[i - 1] + incremento;
        }

        for (int i = 0; i < tamanhoVetor; i++) {
            if (x[i] <= (posicao)) {
                y[i] = -1*((forca*x[i])/tamanhoViga);
            } else {
                y[i] = (forca*(tamanhoViga-x[i]))/tamanhoViga;
            }
        }
        
        cargaMomento.add(x);
        cargaMomento.add(y);

    }

    private void EsforcoCortanteCargaMomento(double forca, double tamanhoViga, double posicao){

        int tamanhoVetor = (int) (tamanhoViga / incremento);
        double x[] = new double[tamanhoVetor];
        double y[] = new double[tamanhoVetor];
        for (int i = 1; i < tamanhoVetor; i++) {
            x[i] = x[i - 1] + incremento;
        }

        for (int i = 0; i < tamanhoVetor; i++) {
            y[i]=-1*forca/tamanhoViga;//gambiarra para inverter o gráfico pois as forças positivas apontam para baixo
        }

        cargaMomento.add(x);
        cargaMomento.add(y);

    }

    public void DeformadaCargaMomento(double forca, double tamanhoViga, double posicao, double Iy){

        int tamanhoVetor = (int) (tamanhoViga / incremento);
        double x[] = new double[tamanhoVetor];
        double y[] = new double[tamanhoVetor];
        for (int i = 1; i < tamanhoVetor; i++) {
            x[i] = x[i - 1] + incremento;
        }

        for (int i = 0; i < tamanhoVetor; i++) {
            y[i] = this.DeformadaCargaMomentoNoPonto(x[i], forca, tamanhoViga, posicao, Iy);
        }

        deformada.add(x);
        deformada.add(y);

    }

    public double MomentoFletorCargaMomentoNoPonto(double x,double forca, double tamanhoViga, double posicao){

                double resultado;
             if (x <= (posicao)) {
                resultado = -1*((forca*x)/tamanhoViga);
            }
             else {
                resultado = (forca*(tamanhoViga-x))/tamanhoViga;
            }

                return resultado;
    }


      public double EsforcoCortanteCargaMomentoNoPonto(double x,double forca, double tamanhoViga, double posicao){

        double resultado;

        resultado=forca/tamanhoViga;//gambiarra para inverter o gráfico pois as forças positivas apontam para baixo
        return resultado;

    }

    public double DeformadaCargaMomentoNoPonto(double x,double forca ,double tamanhoViga, double posicao, double Iy){
        double resultado = 0;
        if(0 <= x & x <= posicao){
            resultado = ((forca*x)/(6*tamanhoViga*coeficienteE*Iy))*(6*posicao*tamanhoViga-3*Math.pow(posicao, 2)-2*Math.pow(tamanhoViga, 2)-Math.pow(x, 2));
        }

        if(posicao <= x && x <= tamanhoViga){
            x = tamanhoViga - x;
            posicao = tamanhoViga - posicao;
            resultado = ((forca*x)/(6*tamanhoViga*coeficienteE*Iy))*(6*posicao*tamanhoViga-3*Math.pow(posicao, 2)-2*Math.pow(tamanhoViga, 2)-Math.pow(x, 2));
        }

        return resultado;
       
    }

    

    public ArrayList<double[]> getCargaMomento() {
        return cargaMomento;
    }

    public ArrayList<double[]> getDeformada() {
        return deformada;
    }

    

    public double getRA() {
        return RA;
    }

    public double getRB() {
        return RB;
    }

    


     
}
